package com.egg.common.util;


import cn.hutool.core.util.ObjectUtil;
import org.springframework.util.AntPathMatcher;

import java.util.List;

/**
 * 路径匹配 工具类
 *
 * @author east
 */
public class PathMatchUtil {


    private static final AntPathMatcher antPathMatcher = new AntPathMatcher();

    /**
     * 路径是否匹配
     *
     * @param source
     * @param target
     * @return
     */
    public static boolean isMatch(String source, String target) {
        //  ？      匹配一个字符
        //  *       匹配0个或多个字符
        //  **      匹配0个或多个目录
        //  */**    匹配所有菜单

        //  /trip/api/*x    匹配 /trip/api/x, /trip/api/ax, /trip/api/abx; 但不匹配 /trip/abc/x
        //  /trip/a/a?x     匹配 /trip/a/abx; 但不匹配 /trip/a/ax, /trip/a/abcx
        //  /**/api/alie    匹配 /trip/api/alie, /trip/dax/api/alie; 但不匹配 /trip/a/api
        //  /**/*.html      匹配所有以.html结尾的路径
        return antPathMatcher.match(source, target);
    }

    /**
     * 权限放行白名单检查
     *
     * @param target 目标地址
     * @return true 属于白名单, false 不属于白名单
     */
    public static boolean matches(String target, List<String> excludes) {
        if (ObjectUtil.isEmpty(excludes)) {
            return false;
        }
        for (String url : excludes) {
            if (PathMatchUtil.isMatch(url, target)) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        String path = "web/**";
        String match = "web/ss/dd/sdf";
        System.out.println(String.format("%s 是否符合 %s", match, isMatch(path, match)));
        String nonMatch = "s/web/dd/sdf";
        System.out.println(String.format("%s 是否符合 %s", nonMatch, isMatch(path, nonMatch)));
    }


}